package com.ruoyi.project.rate;

import com.itextpdf.text.Document;
import com.itextpdf.text.ExceptionConverter;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfTemplate;
import com.itextpdf.text.pdf.PdfWriter;

public class PdfPageNumberHelper extends PdfPageEventHelper {
	private int page = 0;
	public PdfTemplate total;

//	private String fontPath;
	public BaseFont bfChinese;
	
//	public PdfPageNumberHelper(String fontPath) {
//		this.fontPath = fontPath;
//	}

	/**
	 * 重写PdfPageEventHelper中的onOpenDocument方法
	 */
	@Override
	public void onOpenDocument(PdfWriter writer, Document document) {
		// 得到文档的内容并为该内容新建一个模板
		total = writer.getDirectContent().createTemplate(500, 500);
		try {
//			bfChinese = BaseFont.createFont(this.fontPath + Constants.FONT_HEITI,
//					BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
		} catch (Exception e) {
			throw new ExceptionConverter(e);
		}
	}

	/**
	 * 重写PdfPageEventHelper中的onEndPage方法
	 */
	@Override
	public void onEndPage(PdfWriter writer, Document document) {
		// 新建获得用户页面文本和图片内容位置的对象
		PdfContentByte pdfContentByte = writer.getDirectContent();
		// 保存图形状态
		pdfContentByte.saveState();
		page++;
		String text = page + "/";
		// 获取点字符串的宽度
		float textSize = bfChinese.getWidthPoint(text, 9);
		pdfContentByte.beginText();
		// 设置随后的文本内容写作的字体和字号
		pdfContentByte.setFontAndSize(bfChinese, 9);

		// 定位'X/'
		float x = (document.right() + document.left()) / 2;
		float y = 10f;
		pdfContentByte.setTextMatrix(x, y);
		pdfContentByte.showText(text);
		pdfContentByte.endText();

		// 将模板加入到内容（content）中- // 定位'Y'
		pdfContentByte.addTemplate(total, x + textSize, y);

		pdfContentByte.restoreState();
	}

	/**
	 * 重写PdfPageEventHelper中的onCloseDocument方法
	 */
	@Override
	public void onCloseDocument(PdfWriter writer, Document document) {
		total.beginText();
		total.setFontAndSize(bfChinese, 9);
		total.setTextMatrix(0, 0);
		// 设置总页数的值到模板上，并应用到每个界面
		total.showText(page + "");
		total.endText();
	}
}